package br.edu.fateczl.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JOptionPane;

import br.edu.fateczl.model.Obra;
import br.edu.fateczl.model.ObraEmprestimo;
import br.edu.fateczl.model.Publicacao;

public class ObraEmprestimoDAO {
	Connection c;

	public ObraEmprestimoDAO() {
		GenericDAO gDao = new GenericDAO();
		c = gDao.getConnection();
	}

	public boolean insereObra(ObraEmprestimo obra) {
		boolean inserido = false;
		String sql = "INSERT INTO obra_emprestimo (codigo_operacao,codigo_obra) VALUES (?,?)";

		try {
			PreparedStatement ps = c.prepareStatement(sql);
			ps.setInt(1, obra.getCodigo());
			ps.setInt(2, obra.getCodigo_obra());
			ps.execute();
			ps.close();
			inserido = true;
		} catch (SQLException e) {
			JOptionPane.showMessageDialog(null, e.getMessage(), "Erro",
					JOptionPane.ERROR_MESSAGE);
		}
		return inserido;
	}

	public boolean atualizaObra(ObraEmprestimo obra) {
		boolean atualizado = false;
		String sql = "UPDATE obra_emprestimo Set codigo_obra=? WHERE codigo = ?";
		try {
			PreparedStatement ps = c.prepareStatement(sql);
			ps.setInt(1, obra.getCodigo_obra());
			ps.execute();
			ps.close();
			atualizado = true;
		} catch (SQLException e) {
			JOptionPane.showMessageDialog(null, e.getMessage(), "Erro",
					JOptionPane.ERROR_MESSAGE);
		}
		return atualizado;

	}

	public boolean excluiObra(ObraEmprestimo obra) {
		boolean excluido = false;
		String sql = "DELETE obra_emprestimo WHERE codigo = ?";
		try {
			PreparedStatement ps = c.prepareStatement(sql);
			ps.setInt(1, obra.getCodigo());
			ps.execute();
			ps.close();
			excluido = true;
		} catch (SQLException e) {
			JOptionPane.showMessageDialog(null, e.getMessage(), "Erro",
					JOptionPane.ERROR_MESSAGE);
		}
		return excluido;
	}

	public ObraEmprestimo consultaObra(ObraEmprestimo obra) {
		ObraEmprestimo obraConsultada = new ObraEmprestimo();

		String sql = "SELECT codigo_operacao,codigo_obra FROM obra_emprestimo Where codigo_operacao = ?";
		try {
			PreparedStatement ps = c.prepareStatement(sql);
			ps.setInt(1, obra.getCodigo());
			ResultSet rs = ps.executeQuery();
			if (rs.next()) {
				obraConsultada.setCodigo(rs.getInt("codigo_operacao"));
				obraConsultada.setCodigo_obra(rs.getInt("codigo_obra"));
			}
			rs.close();
			ps.close();
		} catch (SQLException e) {
			JOptionPane.showMessageDialog(null, e.getMessage(), "Erro",
					JOptionPane.ERROR_MESSAGE);
		}
		return obraConsultada;
	}

	public List<ObraEmprestimo> consultaObraEmprestimo() {
		List<ObraEmprestimo> listaObra = new ArrayList<ObraEmprestimo>();
		StringBuffer sql = new StringBuffer();
		sql.append("SELECT codigo_operacao,codigo_obra");
		sql.append(" FROM obra_emprestimo");
		try {
			PreparedStatement ps = c.prepareStatement(sql.toString());
			ResultSet rs = ps.executeQuery();
			while (rs.next()) {
				ObraEmprestimo obraConsultada = new ObraEmprestimo();
				obraConsultada.setCodigo(rs.getInt("codigo_operacao"));
				obraConsultada.setCodigo_obra(rs.getInt("codigo_obra"));
				listaObra.add(obraConsultada);
			}
			rs.close();
			ps.close();
		} catch (SQLException e) {
			JOptionPane.showMessageDialog(null, e.getMessage(), "Erro",
					JOptionPane.ERROR_MESSAGE);
		}
		return listaObra;
	}

	public int consultaNumeroLivros(int codigoLivro) throws SQLException {
		int total = 0;
		StringBuffer sql = new StringBuffer();
		Connection con = GenericDAO.getConnection();
		sql.append("select COUNT(codigo_obra) as total");
		sql.append(" from obra_emprestimo");
		sql.append(" where codigo_obra =?");
		PreparedStatement ps = c.prepareStatement(sql.toString());
		ps.setInt(1, codigoLivro);
		ResultSet rs = ps.executeQuery();
		while (rs.next()) {
			total = rs.getInt("total");
		}
		return total;
	}
}
